package com.shujia.base.day04


import play.api.libs.json.{JsValue, Json}


/**
 * 使用scala处理json格式的数据
 *
 * java语言的依赖包：
 * fastjson
 * gson
 *
 * scala语言的依赖包：
 * play-json【需要引入额外的依赖】
 */
object Demo24Json {
  def main(args: Array[String]): Unit = {
    val s1: String =
      """
        |{
        |   "flag":"SUCCESS",
        |   "result":[
        |     {
        |       "id":1001,
        |       "name":"张成阳",
        |       "like":["唱歌","改论文","蛋仔排队"],
        |       "address": null
        |     },{
        |       "id":1002,
        |       "name":"方直",
        |       "like":["敲代码","听歌","睡觉"],
        |       "address":"阜阳"
        |     }
        |   ],
        |   "time":"2025-03-25"
        |}
        |
        |""".stripMargin

    //将符合json格式的字符串，转成json对象
    //在scala中使用play-json进行解析
    val jsonObj: JsValue = Json.parse(s1)

    //使用1：直接获取普通的变量值
    val res1:String = (jsonObj \ "flag").as[String]
    println(res1)

    val id:Int = (jsonObj \ "result" \ 0 \ "id").as[Int]
    println(id)

    /**
     *  as:将获取到的值转对应数据类型，但是如果值是一个null的话，报错了
     *  asOpt: 将获取到的值转对应数据类型, 如果值是一个null的话, 不会报错，返回None【推荐做法】
     */
    val address:Option[String] = (jsonObj \ "result" \ 0 \ "address").asOpt[String]
    println(address)


    //使用2:获取数组
    val zcyLikes: List[String] = (jsonObj \ "result" \ 0 \ "like").as[List[String]]
    zcyLikes.foreach(println)


  }
}
